open closed principles in java